package mini_v340.conf

import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.http.request.builder.HttpRequestBuilder
/**
  * Created by chenbo on 2018/9/11.
  */
object Request {

  /**
    * 处理 post 请求,设置 Authorization , Common parameters
    * @param url  请求链接
    * @param data   请求参数,类型:Map[String,Any]
    * @return
    */
  def post(url:String,data:Map[String,Any]):HttpRequestBuilder={
        http(url).post(Config.root+url)
          .formParamMap(data++params)
          .header("Authorization","${token}")
          .check(status.is(200))
  }

  /**
    * 无请求参数的 post 请求
    * @param url  请求链接
    * @return 返回一个
    */
  def post(url:String):HttpRequestBuilder={
    post(url,Map())
  }

  /**
    * 处理 get 请求,设置 Authorization , Common parameters
    * @param url  请求链接
    * @param data   请求参数,类型:Map[String,Any]
    * @return
    */
  def get(url:String,data:Map[String,Any]):HttpRequestBuilder={
        http(url).get(Config.root+url+parameter(data++params))
          .header("Authorization","${token}")
          .check(status.is(200))
  }

  /**
    * 无请求参数的 get 请求
    * @param url  请求链接
    * @return 返回一个
    */
  def get(url:String):HttpRequestBuilder={
    get(url,Map())
  }

  /**
    * 处理 put 请求,设置 Authorization , Common parameters
    * @param url  请求链接
    * @param data   请求参数,类型:Map[String,Any]
    * @return
    */
  def put(url:String,data:Map[String,Any]):HttpRequestBuilder={
    http(url).put(Config.root+url)
      .formParamMap(data++params)
      .header("Authorization","${token}")
      .check(status.is(200))
  }

  /**
    * 无请求参数的 put 请求
    * @param url  请求链接
    * @return 返回一个
    */
  def put(url:String):HttpRequestBuilder={
    put(url,Map())
  }


  /**
    * 将参数拼接到Url中
    * @param parameter 请求参数
    * @return 返回一个Url字符串
    */
  private[this] def parameter(parameter:Map[String,Any]):String={

    var p = "?"

    parameter.keys.foreach(
      i => p = p + i +"="+parameter(i)+"&"
    )
    return p.substring(0,p.length-1)
  }

  /**
    * 设置 Common parameters
    */
  private[this] var params:Map[String,Any] = Map(
    "version"-> Config.version,
    "citySysNo"->Apply.apply.city,
    "webSiteSysNo"->Apply.apply.webSite,
    "uuk"-> Config.uuk
  )

}
